# -*- coding=UTF-8 -*-
import hashlib
import json


# 接口参数进行MD5加密
def md5(parameters, salt):
    # 获取参数并转化为json格式的字符串
    data_str = json.dumps(parameters)
    # 加密字符串加标识
    sign = salt + data_str + salt
    # 创建md5加密对象
    secret = hashlib.md5()
    # 生成加密字符串并转化为可识别的utf-8格式，防止乱码
    secret.update(sign.encode('utf-8'))
    # 获取加密后的字符串
    return secret.hexdigest(), salt + data_str

class Sign(object):
    """MD5签名和验签"""
    @classmethod
    def data_processing(cls, data):
        """
        :param data: 需要签名的数据，字典类型
        :return: 处理后的字符串，格式为：参数名称=参数值，并用&连接
        """
        if "sign" in data:
            del data["sign"]
        if "sign_type" in data:
            del data["sign_type"]
        dataList = []
        for key in sorted(data):
            if data[key]:
                dataList.append("%s=%s" % (key, data[key]))
        return "&".join(dataList).strip()

    @classmethod
    def md5_sign(cls,data,api_key):
        """
        MD5签名
        :param api_key: MD5签名需要的字符串
        :return: 签名后的字符串sign
        """
        data = api_key.strip() + cls.data_processing(data) + api_key.strip()
        # data = cls.data_processing(data) + api_key.strip()
        md5 = hashlib.md5()
        md5.update(data.encode(encoding='UTF-8'))
        return md5.hexdigest()

    # @classmethod
    # def md5_verify(cls, data,signature):
    #     """
    #     md5验签
    #     :param data: 接收到的数据
    #     :param signature: 接收到的sign
    #     :return: 验签结果,布尔值
    #     """
    #     if cls.md5_sign(data,api_key="sign") == signature:
    #         return True
    #     else:
    #         return False



sign = Sign()